package com.crm.repository;

import com.crm.pojo.SalPlan;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

public interface SalPlanRepository extends JpaRepository<SalPlan, Long> {
    /**
     * 按照销售编号查询指定的开发计划信息
     * @param plaChcId 销售编号
     * @return 返回一个集合
     * @throws Exception
     */
    public List<SalPlan> findSalPlansByPlaChcId(Long plaChcId) throws Exception;

    /**
     * 删除指定的销售编号的开发计划信息
     * @param plaChcId 销售编号
     * @return 返回一个整数结果
     * @throws Exception
     */
    @Modifying
    @Transactional(timeout = 10)
    @Query(value = "delete from SalPlan p where p.plaChcId = ?1")
    public int deleteSalPlanByPlaChcId(Long plaChcId) throws Exception;

    /**
     * 修改指定的开发计划信息中的计划项
     * @param plaTodo 开发计划信息项目项
     * @param plaId 开发计划信息编号
     * @return 返回一个整数结果
     * @throws Exception
     */
    @Modifying
    @Transactional(timeout = 10)
    @Query(value = "update SalPlan p set p.plaTodo = ?1 where p.plaId = ?2")
    public int editSalPlanByPlaId(String plaTodo, Long plaId) throws Exception;

    /**
     * 修改指定的开发计划信息中的执行效果
     * @param plaResult 执行效果
     * @param plaId 开发计划信息编号
     * @return 返回一个整数结果
     * @throws Exception
     */
    @Modifying
    @Transactional(timeout = 10)
    @Query(value = "update SalPlan p set p.plaResult = ?1 where p.plaId = ?2")
    public int editSalPlanInPlaResultByPlaId(String plaResult, Long plaId) throws Exception;

    /**
     * 查看该销售机会是否有开发计划的结果为空
     * @param plaChcId 销售编号
     * @return 返回一个整数结果
     * @throws Exception
     */
    @Query(value = "select count(1) from sal_plan p where p.pla_chc_id = ?1 and p.pla_result is null", nativeQuery = true)
    public int findSalPlanByPlaChcIdIsNull(Long plaChcId) throws Exception;
}